package com.ruoyi.imports.domain;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;

/**
 * Excel 导入数据接收实体
 * 对应 Excel 中的一行数据，包含蒸氨废水、剩余氨水、其他配水三类指标
 * 改造后：仅通过 index 硬映射 Excel 列，不依赖标题文本匹配
 */
@Data
public class RawWaterExcelData implements Serializable {
    private static final long serialVersionUID = 1L;

    // 日期（对应 Excel 第 0 列，格式：2023年1月1日 等）
    @NotEmpty(message = "日期不能为空")
    @DateTimeFormat("yyyy年MM月dd日")
    @ExcelProperty(index = 0)
    private String date;
    // 时间（对应 Excel 第 1 列，格式：8:00 或 08:30 等）
    @NotEmpty(message = "时间不能为空")
    @DateTimeFormat("HH:mm")
    private String time;

    // ===== 蒸氨废水指标 (对应 Excel 第 2 - 17 列) =====
    // 蒸氨废水-pH，对应 Excel 第 2 列
    @ExcelProperty(index = 2)
    @ColumnWidth(12)
    private String zhengAnPh;

    // 蒸氨废水-SS，对应 Excel 第 3 列
    @ExcelProperty(index = 3)
    @ColumnWidth(12)
    private String zhengAnSs;

    // 蒸氨废水-氨氮，对应 Excel 第 4 列
    @ExcelProperty(index = 4)
    @ColumnWidth(12)
    private String zhengAnNh3N;

    // 蒸氨废水-总氮，对应 Excel 第 5 列
    @ExcelProperty(index = 5)
    @ColumnWidth(12)
    private String zhengAnTn;

    // 蒸氨废水-COD，对应 Excel 第 6 列
    @ExcelProperty(index = 6)
    @ColumnWidth(12)
    private String zhengAnCod;

    // 蒸氨废水-BOD，对应 Excel 第 7 列
    @ExcelProperty(index = 7)
    @ColumnWidth(12)
    private String zhengAnBod;

    // 蒸氨废水-硫氰酸根，对应 Excel 第 8 列
    @ExcelProperty(index = 8)
    @ColumnWidth(12)
    private String zhengAnThiocyanate;

    // 蒸氨废水-硫化物，对应 Excel 第 9 列
    @ExcelProperty(index = 9)
    @ColumnWidth(12)
    private String zhengAnSulfide;

    // 蒸氨废水-挥发酚，对应 Excel 第 10 列
    @ExcelProperty(index = 10)
    @ColumnWidth(12)
    private String zhengAnVolatilePhenols;

    // 蒸氨废水-碱度，对应 Excel 第 11 列
    @ExcelProperty(index = 11)
    @ColumnWidth(12)
    private String zhengAnAlk;

    // 蒸氨废水-氯离子，对应 Excel 第 12 列
    @ExcelProperty(index = 12)
    @ColumnWidth(12)
    private String zhengAnCi;

    // 蒸氨废水-石油类，对应 Excel 第 13 列
    @ExcelProperty(index = 13)
    @ColumnWidth(12)
    private String zhengAnPetroleum;

    // 蒸氨废水-苯，对应 Excel 第 14 列
    @ExcelProperty(index = 14)
    @ColumnWidth(12)
    private String zhengAnBenzene;

    // 蒸氨废水-多环芳烃，对应 Excel 第 15 列
    @ExcelProperty(index = 15)
    @ColumnWidth(12)
    private String zhengAnPah;

    // 蒸氨废水-苯并芘，对应 Excel 第 16 列
    @ExcelProperty(index = 16)
    @ColumnWidth(12)
    private String zhengAnBap;

    // 蒸氨废水-总氰，对应 Excel 第 17 列
    @ExcelProperty(index = 17)
    @ColumnWidth(12)
    private String zhengAnTc;

    // ===== 剩余氨水指标 (对应 Excel 第 18 - 33 列) =====
    // 剩余氨水-pH，对应 Excel 第 18 列
    @ExcelProperty(index = 18)
    @ColumnWidth(12)
    private String shengYuPh;

    // 剩余氨水-SS，对应 Excel 第 19 列
    @ExcelProperty(index = 19)
    @ColumnWidth(12)
    private String shengYuSs;

    // 剩余氨水-氨氮，对应 Excel 第 20 列
    @ExcelProperty(index = 20)
    @ColumnWidth(12)
    private String shengYuNh3N;

    // 剩余氨水-总氮，对应 Excel 第 21 列
    @ExcelProperty(index = 21)
    @ColumnWidth(12)
    private String shengYuTn;

    // 剩余氨水-COD，对应 Excel 第 22 列
    @ExcelProperty(index = 22)
    @ColumnWidth(12)
    private String shengYuCod;

    // 剩余氨水-BOD，对应 Excel 第 23 列
    @ExcelProperty(index = 23)
    @ColumnWidth(12)
    private String shengYuBod;

    // 剩余氨水-硫氰酸根，对应 Excel 第 24 列
    @ExcelProperty(index = 24)
    @ColumnWidth(12)
    private String shengYuThiocyanate;

    // 剩余氨水-硫化物，对应 Excel 第 25 列
    @ExcelProperty(index = 25)
    @ColumnWidth(12)
    private String shengYuSulfide;

    // 剩余氨水-挥发酚，对应 Excel 第 26 列
    @ExcelProperty(index = 26)
    @ColumnWidth(12)
    private String shengYuVolatilePhenols;

    // 剩余氨水-碱度，对应 Excel 第 27 列
    @ExcelProperty(index = 27)
    @ColumnWidth(12)
    private String shengYuAlk;

    // 剩余氨水-氯离子，对应 Excel 第 28 列
    @ExcelProperty(index = 28)
    @ColumnWidth(12)
    private String shengYuCi;

    // 剩余氨水-石油类，对应 Excel 第 29 列
    @ExcelProperty(index = 29)
    @ColumnWidth(12)
    private String shengYuPetroleum;

    // 剩余氨水-苯，对应 Excel 第 30 列
    @ExcelProperty(index = 30)
    @ColumnWidth(12)
    private String shengYuBenzene;

    // 剩余氨水-多环芳烃，对应 Excel 第 31 列
    @ExcelProperty(index = 31)
    @ColumnWidth(12)
    private String shengYuPah;

    // 剩余氨水-苯并芘，对应 Excel 第 32 列
    @ExcelProperty(index = 32)
    @ColumnWidth(12)
    private String shengYuBap;

    // 剩余氨水-总氰，对应 Excel 第 33 列
    @ExcelProperty(index = 33)
    @ColumnWidth(12)
    private String shengYuTc;

    // ===== 其他配水指标 (对应 Excel 第 34 - 49 列) =====
    // 其他配水-pH，对应 Excel 第 34 列
    @ExcelProperty(index = 34)
    @ColumnWidth(12)
    private String qiTaPh;

    // 其他配水-SS，对应 Excel 第 35 列
    @ExcelProperty(index = 35)
    @ColumnWidth(12)
    private String qiTaSs;

    // 其他配水-氨氮，对应 Excel 第 36 列
    @ExcelProperty(index = 36)
    @ColumnWidth(12)
    private String qiTaNh3N;

    // 其他配水-总氮，对应 Excel 第 37 列
    @ExcelProperty(index = 37)
    @ColumnWidth(12)
    private String qiTaTn;

    // 其他配水-COD，对应 Excel 第 38 列
    @ExcelProperty(index = 38)
    @ColumnWidth(12)
    private String qiTaCod;

    // 其他配水-BOD，对应 Excel 第 39 列
    @ExcelProperty(index = 39)
    @ColumnWidth(12)
    private String qiTaBod;

    // 其他配水-硫氰酸根，对应 Excel 第 40 列
    @ExcelProperty(index = 40)
    @ColumnWidth(12)
    private String qiTaThiocyanate;

    // 其他配水-硫化物，对应 Excel 第 41 列
    @ExcelProperty(index = 41)
    @ColumnWidth(12)
    private String qiTaSulfide;

    // 其他配水-挥发酚，对应 Excel 第 42 列
    @ExcelProperty(index = 42)
    @ColumnWidth(12)
    private String qiTaVolatilePhenols;

    // 其他配水-碱度，对应 Excel 第 43 列
    @ExcelProperty(index = 43)
    @ColumnWidth(12)
    private String qiTaAlk;

    // 其他配水-氯离子，对应 Excel 第 44 列
    @ExcelProperty(index = 44)
    @ColumnWidth(12)
    private String qiTaCi;

    // 其他配水-石油类，对应 Excel 第 45 列
    @ExcelProperty(index = 45)
    @ColumnWidth(12)
    private String qiTaPetroleum;

    // 其他配水-苯，对应 Excel 第 46 列
    @ExcelProperty(index = 46)
    @ColumnWidth(12)
    private String qiTaBenzene;

    // 其他配水-多环芳烃，对应 Excel 第 47 列
    @ExcelProperty(index = 47)
    @ColumnWidth(12)
    private String qiTaPah;

    // 其他配水-苯并芘，对应 Excel 第 48 列
    @ExcelProperty(index = 48)
    @ColumnWidth(12)
    private String qiTaBap;

    // 其他配水-总氰，对应 Excel 第 49 列
    @ExcelProperty(index = 49)
    @ColumnWidth(12)
    private String qiTaTc;

    // ===== 辅助方法：将 Excel 字符串值转换为 BigDecimal =====
    public BigDecimal getZhengAnPhAsBigDecimal() {
        return parseBigDecimal(zhengAnPh);
    }

    public BigDecimal getZhengAnSsAsBigDecimal() {
        return parseBigDecimal(zhengAnSs);
    }


    private BigDecimal parseBigDecimal(String value) {
        if (value == null || value.trim().isEmpty() || value.equals("-")) {
            return null;
        }
        try {
            return new BigDecimal(value.trim());
        } catch (NumberFormatException e) {
            // 记录日志或抛出异常，根据实际需求处理
            System.err.println("数值格式错误: " + value);
            return null;
        }
    }
}